/********************************************************************
  *  @FileName: pid.h
  *  @Version: V1.0
  *  @Date: 2022-01-07 17:41:23
  *  @Description:
  *  @History:---------------------------
  *    1.Date:
  *      Modification:
  *    2.
**********************************************************************************/

#ifndef __pid_H__
#define __pid_H__

/***************************************Includes***********************************/



/***************************************Macros***********************************/
// #define


/***************************************Variables***********************************/
typedef struct PID_TypeDef {
    float Kp;
    float Ki;
    float Kd;
    float expect;            // 期望
    float output_limits_max; // 输出限幅
    float output_limits_min; // 输出限幅
    float integral_limits_max;
    float integral_limits_min;
    float integral_sum;
    float last_input;
    float output;
    void (*set_expect)(struct PID_TypeDef *Instance, float expect);
    void (*set_pid)(struct PID_TypeDef *Instance, float Kp, float Ki, float Kd);
    void (*set_output_limits)(struct PID_TypeDef *Instance, float output_limits, float output_limits_min);
    void (*set_integral_limits)(struct PID_TypeDef *Instance, float integral_limits_max, float integral_limits_min);
    float (*get_pid)(struct PID_TypeDef *Instance, float input);
} pid_t;


/***************************************Functions***********************************/
/**
 * @brief PID结构初始化
 * @param  Instance 结构句柄
 * @param  Kp
 * @param  Ki
 * @param  Kd
 * @param  expect   期望
 * @param  output_limits 输出极限
 * @param  integral_limits 积分极限
 * @date 2022-01-07 18:01:17
 * @note null
 */
void pid_init(pid_t *Instance, float Kp, float Ki, float Kd, float expect,
              float output_limits_max, float output_limits_min, float integral_limits_max, float integral_limits_min);

/***************************************statement***********************************/

#endif
/* [] END OF FILE */
